#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    close(0);
    int fd1 = open("log1.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);

    while(1)
    {
        printf("fd1 : %d\n", fd1);
    }
    
    fflush(stdout);

    close(fd1);

    return 0;
}











// int main()
// {
//     const char *msage0 = "hello printf\n";
//     const char *msage1 = "hello fwrite\n";
//     const char *msage2 = "hello write\n";

//     printf("%s",msage0);
//     fwrite(msage1,strlen(msage1),1,stdout);
//     write(1,msage2,strlen(msage2));

//     fork();

//     return 0;
// }

// int main()
// {
//     close(2);
//     int fd = open("log.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
//     if(fd < 0)
//     {
//         perror("open");
//         return 1;
//     }
//     perror("hello fd");
//     close(fd);
//     return 0;
// }

// int main()
// {
//     int fd = open("./log.txt", O_CREAT | O_RDWR);
//     if (fd < 0)
//     {
//         perror("open");
//         return 1;
//     }

//     close(1);
//     dup2(fd, 1); // 把fd的*file拷贝到1中

//     while (1)
//     {
//         char buf[1024];
//         ssize_t s = read(0, buf, sizeof(buf) - 1);
//         if (s < 0)
//         {
//             perror("read");
//             return 2;
//         }
//         printf("%s", buf);
//         fflush(stdout);
//     }

//     return 0;
// }

// int main()
// {
//     close(0);
//     int fd1 = open("log1.txt",O_WRONLY|O_CREAT|O_APPEND,0666);
//     int fd2 = open("log2.txt",O_WRONLY|O_CREAT|O_APPEND,0666);
//     int fd3 = open("log3.txt",O_WRONLY|O_CREAT|O_APPEND,0666);
//     int fd4 = open("log4.txt",O_WRONLY|O_CREAT|O_APPEND,0666);

//     printf("fd1 : %d\n",fd1);
//     printf("fd2 : %d\n",fd2);
//     printf("fd3 : %d\n",fd3);
//     printf("fd4 : %d\n",fd4);

//     fflush(stdout);

//     close(fd1);
//     close(fd2);
//     close(fd3);
//     close(fd4);

//     return 0;
// }

// int main()
// {
//     printf("stdin : %d \n",stdin->_fileno);
//     printf("stdout : %d \n",stdout->_fileno);
//     printf("stderr : %d \n",stderr->_fileno);

//     FILE* fp = fopen("log.txt","w");
//     printf("fp : %d \n",fp->_fileno);

//     return 0;
// }

// int main()
// {
//     char buf[1024];
//     ssize_t s = read(0,buf,sizeof(buf));
//     if(s > 0)
//     {
//         write(1,buf,strlen(buf));
//         write(2,buf,strlen(buf));
//     }

//     return 0;
// }

// //读文件
// int main()
// {
//     int fd = open("log.txt",O_RDONLY);

//     if(fd < 0)
//     {
//         perror("open");
//         return 1;
//     }

//     const char* msage = "hello Linux!\n";
//     char buffer[1024];
//     while(1)
//     {
//         ssize_t s = read(fd,buffer,strlen(msage));//类比write
//         if(s > 0)
//         {
//             printf("%s",buffer);
//         }
//         else
//         {
//             break;
//         }
//     }

//     close(fd);//关闭文件

// }

// //写文件
// int main()
// {
//     umask(0);

//     //                              不存在就创建  存在清空   追加
//     int fd = open("log.txt",O_WRONLY | O_CREAT| O_TRUNC | O_APPEND,0666);

//     if(fd < 0)
//     {
//         perror("open");
//         return 1;
//     }

//     const char* mesage = "hello Linux1!\n";
//     int cont = 5;
//     while(cont--)
//         write(fd,mesage,strlen(mesage));
//         //fd: 文件描述符，后⾯讲， msg：缓冲区⾸地址， len: 本次读取，期望写⼊多少个字节的数据。 返回值：实际写了多少字节数据

// }

// int main(int argc,char* argv[])
// {
//     if(argc != 2)
//     {
//         printf("argc 错误\n");
//         return 1;
//     }
//     open(argv[1],O_WRONLY|O_CREAT,0666);

//     return 0;
// }

// int main()
// {
//     // 创建普通用户，只写打开
//     //umask默认是0002
//     open("log1.txt",O_WRONLY|O_CREAT,0666);

//     //更改umask权限
//     umask(0);
//     open("log2.txt",O_WRONLY|O_CREAT,0666);

//     return 0;
// }

// #define ONE (1 << 0)   // 0;
// #define TWO (1 << 1)   // 2;
// #define THREE (1 << 2) // 4;
// #define FOUR (1 << 3)  // 8;
// #define FIVE (1 << 4)  // 16;

// void PrintTest(int flags)
// {
//     if (flags & ONE)
//     {
//         // 此处可添加对应的功能
//         printf("one\n");
//     }

//     if (flags & TWO)
//     {
//         // 此处可添加对应的功能
//         printf("two\n");
//     }

//     if (flags & THREE)
//     {
//         // 此处可添加对应的功能
//         printf("three\n");
//     }

//     if (flags & FOUR)
//     {
//         // 此处可添加对应的功能
//         printf("four\n");
//     }

//     if (flags & FIVE)
//     {
//         // 此处可添加对应的功能
//         printf("five\n");
//     }
// }

// int main()
// {
//     // 通过传不同的位置标记，实现不同的功能
//     PrintTest(ONE);
//     printf("################\n");
//     PrintTest(ONE | TWO);
//     printf("################\n");
//     PrintTest(TWO | THREE | FIVE);
// }

// int main()
// {
//     const char *msage = "hello Linux\n";
//     fwrite(msage,strlen(msage),1,stdout);

//     printf("hello Linux\n");
//     fputs("aaaaaa\n",stdout);
//     //      内容 基本单元 长度 打印位置
//     fwrite("bbbb\n",1,5,stdout);

//     fprintf(stdout,"hehehe\n");

//     return 0;
// }

// int main(int argc,char* argv[])
// {

//     if(argc != 2)
//     {
//         printf("argc error!\n");
//         return 1;
//     }

//     FILE *fp = fopen(argv[1], "r");
//     if (!fp)
//     {
//         printf("fopen error!\n");
//         return 2;
//     }

//     char buf[1024];
//     while (1)
//     {
//         // 注意返回值和参数，此处有坑，仔细查看man⼿册关于该函数的说明
//         size_t s = fread(buf, 1, strlen(buf), fp);
//         if (s > 0)
//         {
//             buf[s] = 0;
//             printf("%s", buf);
//         }
//         if (feof(fp))
//         {
//             break;
//         }
//     }

//     fclose(fp);
//     return 0;
// }

// int main()
// {

//     FILE *fp = fopen("myfile", "r");
//     if (!fp)
//     {
//         printf("fopen error!\n");
//         return 1;
//     }

//     char buf[1024];
//     const char *mesage = "hello wolrd\n";

//     //读文件
//     while (1)
//     {
//         // 注意返回值和参数，此处有坑，仔细查看man⼿册关于该函数的说明
//         size_t s = fread(buf, 1, strlen(mesage), fp);
//         if (s > 0)
//         {
//             buf[s] = 0;
//             printf("%s", buf);
//         }
//         if (feof(fp))
//         {
//             break;
//         }
//     }

//     fclose(fp);
//     return 0;
// }
